home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / linux / blktrace_api.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  4.3 KB  |  140 lines

  1. #ifndef BLKTRACE_H
  2. #define BLKTRACE_H
  3.  
  4.  
  5. /*
  6.  * Trace categories
  7.  */
  8. enum blktrace_cat {
  9.     BLK_TC_READ    = 1 << 0,    /* reads */
  10.     BLK_TC_WRITE    = 1 << 1,    /* writes */
  11.     BLK_TC_BARRIER    = 1 << 2,    /* barrier */
  12.     BLK_TC_SYNC    = 1 << 3,    /* sync IO */
  13.     BLK_TC_QUEUE    = 1 << 4,    /* queueing/merging */
  14.     BLK_TC_REQUEUE    = 1 << 5,    /* requeueing */
  15.     BLK_TC_ISSUE    = 1 << 6,    /* issue */
  16.     BLK_TC_COMPLETE    = 1 << 7,    /* completions */
  17.     BLK_TC_FS    = 1 << 8,    /* fs requests */
  18.     BLK_TC_PC    = 1 << 9,    /* pc requests */
  19.     BLK_TC_NOTIFY    = 1 << 10,    /* special message */
  20.     BLK_TC_AHEAD    = 1 << 11,    /* readahead */
  21.     BLK_TC_META    = 1 << 12,    /* metadata */
  22.     BLK_TC_DISCARD    = 1 << 13,    /* discard requests */
  23.     BLK_TC_DRV_DATA    = 1 << 14,    /* binary per-driver data */
  24.  
  25.     BLK_TC_END    = 1 << 15,    /* only 16-bits, reminder */
  26. };
  27.  
  28. #define BLK_TC_SHIFT        (16)
  29. #define BLK_TC_ACT(act)        ((act) << BLK_TC_SHIFT)
  30.  
  31. /*
  32.  * Basic trace actions
  33.  */
  34. enum blktrace_act {
  35.     __BLK_TA_QUEUE = 1,        /* queued */
  36.     __BLK_TA_BACKMERGE,        /* back merged to existing rq */
  37.     __BLK_TA_FRONTMERGE,        /* front merge to existing rq */
  38.     __BLK_TA_GETRQ,            /* allocated new request */
  39.     __BLK_TA_SLEEPRQ,        /* sleeping on rq allocation */
  40.     __BLK_TA_REQUEUE,        /* request requeued */
  41.     __BLK_TA_ISSUE,            /* sent to driver */
  42.     __BLK_TA_COMPLETE,        /* completed by driver */
  43.     __BLK_TA_PLUG,            /* queue was plugged */
  44.     __BLK_TA_UNPLUG_IO,        /* queue was unplugged by io */
  45.     __BLK_TA_UNPLUG_TIMER,        /* queue was unplugged by timer */
  46.     __BLK_TA_INSERT,        /* insert request */
  47.     __BLK_TA_SPLIT,            /* bio was split */
  48.     __BLK_TA_BOUNCE,        /* bio was bounced */
  49.     __BLK_TA_REMAP,            /* bio was remapped */
  50.     __BLK_TA_ABORT,            /* request aborted */
  51.     __BLK_TA_DRV_DATA,        /* driver-specific binary data */
  52. };
  53.  
  54. /*
  55.  * Notify events.
  56.  */
  57. enum blktrace_notify {
  58.     __BLK_TN_PROCESS = 0,        /* establish pid/name mapping */
  59.     __BLK_TN_TIMESTAMP,        /* include system clock */
  60.     __BLK_TN_MESSAGE,        /* Character string message */
  61. };
  62.  
  63.  
  64. /*
  65.  * Trace actions in full. Additionally, read or write is masked
  66.  */
  67. #define BLK_TA_QUEUE        (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
  68. #define BLK_TA_BACKMERGE    (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
  69. #define BLK_TA_FRONTMERGE    (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
  70. #define    BLK_TA_GETRQ        (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
  71. #define    BLK_TA_SLEEPRQ        (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
  72. #define    BLK_TA_REQUEUE        (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
  73. #define BLK_TA_ISSUE        (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
  74. #define BLK_TA_COMPLETE        (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE))
  75. #define BLK_TA_PLUG        (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
  76. #define BLK_TA_UNPLUG_IO    (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
  77. #define BLK_TA_UNPLUG_TIMER    (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
  78. #define BLK_TA_INSERT        (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
  79. #define BLK_TA_SPLIT        (__BLK_TA_SPLIT)
  80. #define BLK_TA_BOUNCE        (__BLK_TA_BOUNCE)
  81. #define BLK_TA_REMAP        (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
  82. #define BLK_TA_ABORT        (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
  83. #define BLK_TA_DRV_DATA    (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
  84.  
  85. #define BLK_TN_PROCESS        (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
  86. #define BLK_TN_TIMESTAMP    (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
  87. #define BLK_TN_MESSAGE        (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
  88.  
  89. #define BLK_IO_TRACE_MAGIC    0x65617400
  90. #define BLK_IO_TRACE_VERSION    0x07
  91.  
  92. /*
  93.  * The trace itself
  94.  */
  95. struct blk_io_trace {
  96.     __u32 magic;        /* MAGIC << 8 | version */
  97.     __u32 sequence;        /* event number */
  98.     __u64 time;        /* in microseconds */
  99.     __u64 sector;        /* disk offset */
  100.     __u32 bytes;        /* transfer length */
  101.     __u32 action;        /* what happened */
  102.     __u32 pid;        /* who did it */
  103.     __u32 device;        /* device number */
  104.     __u32 cpu;        /* on what cpu did it happen */
  105.     __u16 error;        /* completion error */
  106.     __u16 pdu_len;        /* length of data after this trace */
  107. };
  108.  
  109. /*
  110.  * The remap event
  111.  */
  112. struct blk_io_trace_remap {
  113.     __be32 device;
  114.     __be32 device_from;
  115.     __be64 sector;
  116. };
  117.  
  118. enum {
  119.     Blktrace_setup = 1,
  120.     Blktrace_running,
  121.     Blktrace_stopped,
  122. };
  123.  
  124. #define BLKTRACE_BDEV_SIZE    32
  125.  
  126. /*
  127.  * User setup structure passed with BLKTRACESTART
  128.  */
  129. struct blk_user_trace_setup {
  130.     char name[BLKTRACE_BDEV_SIZE];    /* output */
  131.     __u16 act_mask;            /* input */
  132.     __u32 buf_size;            /* input */
  133.     __u32 buf_nr;            /* input */
  134.     __u64 start_lba;
  135.     __u64 end_lba;
  136.     __u32 pid;
  137. };
  138.  
  139. #endif
  140.